﻿Imports StartPoint.BR.Interfaces
Imports StartFrame.BR.Interfaces
Imports StartFrame.SystemFunctions
Imports Common.Env
Imports System.Data.OleDb

Namespace Ventas.Procesos

    Public Class InterfaseFacEleExp
        Inherits StartFrame.US.Dialogo

#Region " Código generado por el Diseñador de Windows Forms "
        Friend WithEvents lblCotMonExt As System.Windows.Forms.Label
        Friend WithEvents lblTipoTransc As System.Windows.Forms.Label
        Friend WithEvents lblTipoCompr As System.Windows.Forms.Label
        Friend WithEvents lblPtoVta As System.Windows.Forms.Label
        Friend WithEvents lblTpTransValor As System.Windows.Forms.Label
        Friend WithEvents lblTpCompValor As System.Windows.Forms.Label
        Friend WithEvents lblPtoVtaValor As System.Windows.Forms.Label


        Private Sub InitializeComponent()
            Me.components = New System.ComponentModel.Container
            Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(InterfaseFacEleExp))
            Me.lblPtoVtaValor = New System.Windows.Forms.Label
            Me.lblTpCompValor = New System.Windows.Forms.Label
            Me.lblTpTransValor = New System.Windows.Forms.Label
            Me.lblPtoVta = New System.Windows.Forms.Label
            Me.lblTipoCompr = New System.Windows.Forms.Label
            Me.lblTipoTransc = New System.Windows.Forms.Label
            Me.txtCotMonExt = New LnkTextBoxNumerico
            Me.lblCotMonExt = New System.Windows.Forms.Label
            Me.TabPage1.SuspendLayout()
            Me.LnkTab1.SuspendLayout()
            CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'lblTitulo
            '
            Me.lblTitulo.Location = New System.Drawing.Point(0, 2)
            Me.lblTitulo.Text = "Factura Electrónica: Exportación"
            '
            'TabPage1
            '
            Me.TabPage1.Controls.Add(Me.lblPtoVtaValor)
            Me.TabPage1.Controls.Add(Me.lblTpCompValor)
            Me.TabPage1.Controls.Add(Me.lblTpTransValor)
            Me.TabPage1.Controls.Add(Me.lblPtoVta)
            Me.TabPage1.Controls.Add(Me.lblTipoCompr)
            Me.TabPage1.Controls.Add(Me.lblTipoTransc)
            Me.TabPage1.Controls.Add(Me.txtCotMonExt)
            Me.TabPage1.Controls.Add(Me.lblCotMonExt)
            '
            'cmdAyuda
            '
            Me.cmdAyuda.Image = CType(resources.GetObject("cmdAyuda.Image"), System.Drawing.Image)
            '
            'cmdMinimizar
            '
            Me.cmdMinimizar.Image = CType(resources.GetObject("cmdMinimizar.Image"), System.Drawing.Image)
            '
            'PictureBox2
            '
            Me.PictureBox2.BackgroundImage = CType(resources.GetObject("PictureBox2.BackgroundImage"), System.Drawing.Image)
            '
            'PictureBox1
            '
            Me.PictureBox1.BackgroundImage = CType(resources.GetObject("PictureBox1.BackgroundImage"), System.Drawing.Image)
            '
            'PictureBox3
            '
            Me.PictureBox3.BackgroundImage = CType(resources.GetObject("PictureBox3.BackgroundImage"), System.Drawing.Image)
            '
            'cmdSalir
            '
            Me.cmdSalir.Image = CType(resources.GetObject("cmdSalir.Image"), System.Drawing.Image)
            Me.ToolTip.SetToolTip(Me.cmdSalir, "Cierra el formulario (^F4)")
            '
            'cmdConfirmar
            '
            Me.cmdConfirmar.Image = CType(resources.GetObject("cmdConfirmar.Image"), System.Drawing.Image)
            Me.ToolTip.SetToolTip(Me.cmdConfirmar, "Confirma la operación (F9)")
            '
            'cmdCancelar
            '
            Me.cmdCancelar.Image = CType(resources.GetObject("cmdCancelar.Image"), System.Drawing.Image)
            Me.ToolTip.SetToolTip(Me.cmdCancelar, "Cancela la operación (ESC)")
            '
            'lblPtoVtaValor
            '
            Me.lblPtoVtaValor.AutoSize = True
            Me.lblPtoVtaValor.Location = New System.Drawing.Point(161, 127)
            Me.lblPtoVtaValor.Name = "lblPtoVtaValor"
            Me.lblPtoVtaValor.Size = New System.Drawing.Size(10, 13)
            Me.lblPtoVtaValor.TabIndex = 21
            Me.lblPtoVtaValor.Text = "."
            '
            'lblTpCompValor
            '
            Me.lblTpCompValor.AutoSize = True
            Me.lblTpCompValor.Location = New System.Drawing.Point(161, 97)
            Me.lblTpCompValor.Name = "lblTpCompValor"
            Me.lblTpCompValor.Size = New System.Drawing.Size(10, 13)
            Me.lblTpCompValor.TabIndex = 20
            Me.lblTpCompValor.Text = "."
            '
            'lblTpTransValor
            '
            Me.lblTpTransValor.AutoSize = True
            Me.lblTpTransValor.Location = New System.Drawing.Point(161, 68)
            Me.lblTpTransValor.Name = "lblTpTransValor"
            Me.lblTpTransValor.Size = New System.Drawing.Size(10, 13)
            Me.lblTpTransValor.TabIndex = 19
            Me.lblTpTransValor.Text = "."
            '
            'lblPtoVta
            '
            Me.lblPtoVta.AutoSize = True
            Me.lblPtoVta.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblPtoVta.Location = New System.Drawing.Point(24, 127)
            Me.lblPtoVta.Name = "lblPtoVta"
            Me.lblPtoVta.Size = New System.Drawing.Size(98, 13)
            Me.lblPtoVta.TabIndex = 18
            Me.lblPtoVta.Text = "Punto de venta:"
            '
            'lblTipoCompr
            '
            Me.lblTipoCompr.AutoSize = True
            Me.lblTipoCompr.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblTipoCompr.Location = New System.Drawing.Point(24, 97)
            Me.lblTipoCompr.Name = "lblTipoCompr"
            Me.lblTipoCompr.Size = New System.Drawing.Size(131, 13)
            Me.lblTipoCompr.TabIndex = 17
            Me.lblTipoCompr.Text = "Tipo de comprobante:"
            '
            'lblTipoTransc
            '
            Me.lblTipoTransc.AutoSize = True
            Me.lblTipoTransc.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblTipoTransc.Location = New System.Drawing.Point(24, 68)
            Me.lblTipoTransc.Name = "lblTipoTransc"
            Me.lblTipoTransc.Size = New System.Drawing.Size(128, 13)
            Me.lblTipoTransc.TabIndex = 16
            Me.lblTipoTransc.Text = "Tipo de Transacción:"
            '
            'txtCotMonExt
            '
            Me.txtCotMonExt.BuscarArchivo = False
            Me.txtCotMonExt.BuscarDirectorio = False
            Me.txtCotMonExt.Formato = "c"
            Me.txtCotMonExt.Location = New System.Drawing.Point(251, 34)
            Me.txtCotMonExt.Maximo = 999999999
            Me.txtCotMonExt.Minimo = 0
            Me.txtCotMonExt.Name = "txtCotMonExt"
            Me.txtCotMonExt.Obligatorio = False
            Me.txtCotMonExt.RegularExpression = Nothing
            Me.txtCotMonExt.Size = New System.Drawing.Size(100, 20)
            Me.txtCotMonExt.TabIndex = 0
            Me.txtCotMonExt.Text = "$ 0.00"
            Me.txtCotMonExt.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
            Me.txtCotMonExt.TipoEstilo = LnkTextBox.Estilo.Indistinto
            Me.ToolTip.SetToolTip(Me.txtCotMonExt, "Cotización de la moneda extranjera")
            Me.txtCotMonExt.Value = 0
            '
            'lblCotMonExt
            '
            Me.lblCotMonExt.AutoSize = True
            Me.lblCotMonExt.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblCotMonExt.Location = New System.Drawing.Point(24, 37)
            Me.lblCotMonExt.Name = "lblCotMonExt"
            Me.lblCotMonExt.Size = New System.Drawing.Size(210, 13)
            Me.lblCotMonExt.TabIndex = 14
            Me.lblCotMonExt.Text = "Cotización de la moneda extranjera:"
            '
            'InterfaseFacEleExp
            '
            Me.BackgroundImage = Nothing
            Me.ClientSize = New System.Drawing.Size(524, 403)
            Me.Name = "InterfaseFacEleExp"
            Me.TabPage1.ResumeLayout(False)
            Me.TabPage1.PerformLayout()
            Me.LnkTab1.ResumeLayout(False)
            CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)

        End Sub

#End Region

#Region " Constructor"
        Public Sub New()
            MyBase.New()

            'El Diseñador de Windows Forms requiere esta llamada.
            InitializeComponent()

            'Agregar cualquier inicialización después de la llamada a InitializeComponent()

        End Sub
#End Region

#Region " Declaraciones "

#Region " General "

        Private _Transaccion As String      'Transacción por defecto
        Private _Circuito As String         'Circuito por defecto

        Private _Path As String             'Ruta en donde exportar
        Private _TipoExportacion As String          'Tipo de exportacion a afip (ME, TDF)

        Private _Param As IParametro = CType(RemotingHelper.getObject(GetType(IParametro)), IParametro)
        Private _ParamTransac As IParametrosTransaccion = CType(RemotingHelper.getObject(GetType(IParametrosTransaccion)), IParametrosTransaccion)
        Private par_genfcele As Boolean
        Private par_redondeo As String
        Private par_redondeoPV As String        'Redondeo por punto de venta para Factura electronica
        Private _DecCostos As Integer           'Cantidad de decimales para redondeo de importes




        'Objetos de BR que se utilizarán
        Private Sql As ISql

        'Otros formularios
        Private frmSelectPtoVta As New StartPoint.US.Utilitarios.SelectPtoVta
        Private frmSelectTransac As New StartPoint.US.Utilitarios.SelectTransac("VENTAS")

#End Region

#End Region

#Region " Eventos "

        'Al cargar el formulario
        Private Sub VPInterfaseFeExp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            'Solicita se especifique la transacción
            Me._Circuito = ""
            Me._Transaccion = ""

            'Otros objetos de negocios
            Sql = CType(RemotingHelper.getObject(GetType(ISql)), ISql)

            InicializaForm()

            'Punto de Venta
            If Me._Transaccion <> "" Then
                Me.InicializaFormPtoVta()
            End If

            lblTpTransValor.Text = _Circuito.Trim
            lblTpCompValor.Text = _Transaccion
            lblPtoVtaValor.Text = Common.Env.PuntoVenta

            _Path = _Param.getParametro("DIREXP_FE").Trim()

            _TipoExportacion = _Param.getParametro("EXPAFIP_" + _Circuito.Trim()).Trim()
            par_genfcele = (CType(_ParamTransac.GetParametro(Me._Transaccion, "GEN_FCELE"), Boolean)) And (CType(Sql.Search(ConnectionString, "st_fcelectronica", "vad_puntos_venta", "nu_ptovta = " & Common.Env.PuntoVenta), Boolean))

            'Setea el path dependiendo del tipo de transaccion 
            Select Case _TipoExportacion
                Case "ML"
                    _Path = _Path.Trim + "\ML"
                    Me.txtCotMonExt.Text = 1
                    Me.txtCotMonExt.ReadOnly = True
                Case "ME"
                    _Path = _Path.Trim + "\ME"
                    Me.txtCotMonExt.Text = 0
                    Me.txtCotMonExt.ReadOnly = False
                Case "TDF"
                    _Path = _Path.Trim + "\ME"
                    Me.txtCotMonExt.Text = 1
                    Me.txtCotMonExt.ReadOnly = True
                Case Else
                    _Path = ""
                    Me.txtCotMonExt.Text = 0
            End Select

            '...redondeo por circuito (Ej. de valores posibles: G2, P3, G0)
            Try
                par_redondeo = _Param.getParametro("REDONDEO_" & Me._Circuito.ToUpper.Trim)
            Catch ex As Exception
                par_redondeo = ""
            End Try

            If par_redondeo = String.Empty Then
                'toma el redondeo global del sistema
                _DecCostos = _Param.getParametro("DECCOSTOS")
                par_redondeo = "G"
            Else
                'toma el redondeo del parámetro por circuito, ya sea global (G) o parcial (P)
                _DecCostos = CType(par_redondeo.Substring(1), Integer)
                par_redondeo = par_redondeo.Substring(0, 1)
            End If

            '...redondeo por punto de venta
            If _TipoExportacion = "ML" Then
                par_redondeoPV = "0.00"
            Else
                Try
                    par_redondeoPV = _Param.getParametro("REDONDEO_FE" & Common.Env.PuntoVenta.ToString.Trim)
                Catch ex As Exception
                    par_redondeoPV = "0.00"
                End Try

            End If

            'Si la variable queda vacia le asigna un valor
            If par_redondeoPV = "" Then
                par_redondeoPV = "0.00"
            End If

            If _TipoExportacion = "" And Not par_genfcele Then
                StartFrame.US.Display.MsgBox("Esta transacción no genera Factura Electrónica.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgInformacion)

            End If
            txtCotMonExt.Focus()

        End Sub

        'Se produce al presionar OK
        'RV: AF
        Public Overrides Sub cmdConfirmar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConfirmar.Click
            'Validacion previa
            If Me.txtCotMonExt.Text = String.Empty Or Me.txtCotMonExt.Value = 0 Then
                StartFrame.US.Display.MsgBox("Debe completar la cotización de la Moneda Extranjera.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgInformacion)
                Exit Sub
            End If

            GeneraFacturaElectronica()

        End Sub

#End Region

#Region "Metodos"

        'Solicita el ingreso de una transacción de ventas
        Private Sub InicializaForm()

            'Llama al formulario para seleccionar una transacción
            Dim vSeleccionoOk As Boolean = False

            Do Until vSeleccionoOk
                If frmSelectTransac.ShowDialog = DialogResult.OK Then

                    If frmSelectTransac.Transaccion = "" Then
                        'Si no seleccionó alguna transacción, informa al operador
                        StartFrame.US.Display.MsgBox("Antes de poder registrar una operación de ventas deberá ingresar la " & _
                                                    "transacción en el sistema de Utilitarios", "Transacción", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                        Me._Circuito = ""
                        Me._Transaccion = ""
                        vSeleccionoOk = False
                        'Me.LnkTab1.Enabled = False
                        'Throw New Exception("No seleccionó ninguna transacción.")

                    Else
                        'Guarda el código de la transacción relacionada en una propiedad
                        Me._Circuito = frmSelectTransac.Circuito
                        Me._Transaccion = frmSelectTransac.Transaccion
                        vSeleccionoOk = True
                    End If

                Else
                    'Si no seleccionó alguna transacción, informa al operador
                    StartFrame.US.Display.MsgBox("Antes de poder registrar una operación de ventas deberá ingresar la " & _
                                                "transacción en el sistema de Utilitarios", "Transacción", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                    Me._Circuito = ""
                    Me._Transaccion = ""
                    vSeleccionoOk = False
                    'Me.LnkTab1.Enabled = False
                    'Throw New Exception("No seleccionó ninguna transacción.")
                End If
            Loop
        End Sub

        Private Sub InicializaFormPtoVta()
            Dim vSeleccionaOk As Boolean = False
            Do Until vSeleccionaOk
                'Llama al formulario para seleccionar un Punto de Venta
                'y setear Common.Env.PuntoVenta
                If frmSelectPtoVta.ShowDialog = DialogResult.OK Then
                    If frmSelectPtoVta.PtoVta <> "" Then
                        Common.Env.PuntoVenta = frmSelectPtoVta.PtoVta
                        vSeleccionaOk = True
                    End If
                End If

                'Comprueba la selección
                If Common.Env.PuntoVenta = 0 Then
                    vSeleccionaOk = False
                    'Throw New Exception("Debe seleccionar un punto de venta antes de poder emitir una transacción.")
                    StartFrame.US.Display.MsgBox("Deberá seleccionar un punto de ventas válido para continuar. ", "Transacción", StartFrame.US.Display.MsgBoxTipos.msgAlerta)

                End If
            Loop

        End Sub





        Private Sub GeneraFacturaElectronica()
            'Cartel de espera
            Dim mensaje As New StartFrame.US.ShowMsg(StartFrame.US.ShowMsg.Tipos.MensajeSimple, "Realizando exportación de Factura Electrónica..")
            mensaje.Grafico = StartFrame.US.ShowMsg.Graficos.Grabar
            mensaje.Show()
            mensaje.Refresh()

            Try

                Dim dsPrefacturas, dsCabecera, dsDetalle, dsDatosFormulario, dsPie, dsPrefacturasTotal, dsImpuestos, dsImpuestosIB As DataSet
                Dim dsImportados, dsTributos, dsIva, dsIva2, dsRelacionados As DataSet
                Dim sCampos, sOrigen, sCondicion, sOrden As String
                Dim bPrimeraPasada As Boolean = True
                Dim iUltimoExportado As Integer = 0

                'Exportacion
                Dim Sw1 As IO.StreamWriter = Nothing
                Dim vLine As String = Nothing
                Dim xFile As String


                sCampos = "*, dbo.Num2Words(im_total,'SP') num2letras"
                sOrigen = "vcd_facturas"
                sCondicion = "cd_transaccion = '" & Trim(Me._Transaccion) & "' and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))
                sCondicion += " and cd_estado_trans = 'PREFACTURA' and cd_circuito = '" & Me._Circuito.Trim & "'"
                sOrden = "cd_transaccion, nu_ptovta, nu_pri_comprobante "

                'Seleccionar todos los comprobantes a procesar
                dsPrefacturas = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion, sOrden)

                If _Path = "" Then
                    StartFrame.US.Display.MsgBox("El circuito '" + Me._Circuito.ToString.Trim + "' no está correctamente configurado para Factura Electrónica.", "Error de configuracion", StartFrame.US.Display.MsgBoxTipos.msgInformacion)
                    Exit Sub
                End If

                'Mientras no este vacio
                If dsPrefacturas.Tables(0).Rows.Count = 0 Then
                    StartFrame.US.Display.MsgBox("No se encontraron prefacturas a exportar.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgInformacion)
                    Exit Sub
                End If


                'Valida la numeracion correlativa de las facturas a generar e intenta corregirla
                If Not ValidaNumeracion(dsPrefacturas) Then
                    StartFrame.US.Display.MsgBox("Error al validar la numeración correlativa.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                    Exit Sub
                End If

                'Si no existe intenta crearlo.
                If Not System.IO.Directory.Exists(_Path) Then
                    Try
                        ' Try to create the directory.
                        Dim DI1 As System.IO.DirectoryInfo = System.IO.Directory.CreateDirectory(_Path)
                    Catch ex As Exception
                        StartFrame.US.Display.MsgBox("Error al crear el directorio de exportación.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                        Exit Sub
                    End Try
                End If

                'Nombre del archivo
                xFile = _Path + "\FE" + Now.ToString("yyyy") + Now.ToString("MM") + Now.ToString("dd") + Now.ToString("hh") + Now.ToString("mm") + ".txt"

                Try

                    Sw1 = New IO.StreamWriter(xFile, True, System.Text.Encoding.UTF8)
                Catch ex As Exception
                    StartFrame.US.Display.MsgBox("Error al crear el archivo de exportación.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                    mensaje.Close()
                    Exit Sub
                End Try


                Try

                    'Linea de cabecera de archivo (LAY-OUT FACTURA ELECTRÓNICA EXPORTACION)
                    'Busqueda de datos

                    sCampos = "SUM(im_total) as im_total, SUM(im_neto_no_grav) as im_neto_no_grav, SUM(im_neto) as im_neto, SUM(im_impuesto) as im_impuesto"
                    sOrigen = "vcd_facturas"
                    sCondicion = "cd_transaccion = '" & Trim(Me._Transaccion) & "' and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta)) & " and cd_estado_trans = 'PREFACTURA'"

                    'Seleccionar todos los comprobantes a procesar
                    dsPrefacturasTotal = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                    sCampos = "SUM(a.im_impuesto) as im_impuesto"

                    sOrigen = "(vcd_facturas vfac inner join vld_impuestos a on vfac.cd_transaccion = a.cd_transaccion and "
                    sOrigen += "vfac.nu_transaccion = a.nu_transaccion and vfac.fe_transaccion = a.fe_transaccion) "
                    sOrigen += "join vad_impuestos b on a.cd_impuesto_vta = b.cd_impuesto_vta"

                    sCondicion = "b.tp_impuesto = 'P' and b.tp_impuesto_clase <> 'B' and "
                    sCondicion += " vfac.cd_transaccion = '" & Trim(Me._Transaccion) & "' and vfac.nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta)) & " and vfac.cd_estado_trans = 'PREFACTURA'"

                    dsImpuestos = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                    sCondicion = "b.tp_impuesto = 'P' and b.tp_impuesto_clase = 'B' and "
                    sCondicion += " vfac.cd_transaccion = '" & Trim(Me._Transaccion) & "' and vfac.nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta)) & " and vfac.cd_estado_trans = 'PREFACTURA'"
                    dsImpuestosIB = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                    '-------------------------------------------------------------------------------
                    '"CE" CABECERA DEL EMISOR
                    '-------------------------------------------------------------------------------
                    'Armado de linea
                    vLine = "CE|" 'Tipo de registro (para Levicom)
                    vLine += _Param.getParametro("CD_CLI_LEVICOM").Trim() + "|" 'Nro. Cliente Levicom
                    vLine += Format(System.DateTime.Now, "yyyyMM").ToString() + "|" 'Período CE03
                    vLine += dsPrefacturas.Tables(0).Rows.Count.ToString() + "|" 'Cantidad de registros de tipo CR
                    vLine += _Param.getParametro("FORM_CUIT").Trim() + "|" 'CUIT del informante
                    vLine += _Param.getParametro("FORM_EMP").Trim() + "|" 'Apellido y Nombre o Razón social del Emisor
                    vLine += _Param.getParametro("FORM_IMP1").Trim() + "|" 'N° Ingresos Brutos del Emisor
                    vLine += Format(dsPrefacturasTotal.Tables(0).Rows(0)("im_total"), "0.00").ToString().Replace(",", ".") + "|" 'Importe total de la operación / Importe total por lote
                    vLine += Format(dsPrefacturasTotal.Tables(0).Rows(0)("im_neto_no_grav"), "0.00#").ToString().Replace(",", ".") + "|" 'Importe total de conceptos que no integran el precio neto gravado
                    vLine += Format(dsPrefacturasTotal.Tables(0).Rows(0)("im_neto"), "0.00#").ToString().Replace(",", ".") + "|" 'Importe neto gravado
                    vLine += Format(dsPrefacturasTotal.Tables(0).Rows(0)("im_impuesto"), "0.00#").ToString().Replace(",", ".") + "|" 'Impuesto liquidado
                    vLine += "0.00|" 'Impuesto liquidado a RNI o percepción a no categorizados
                    vLine += "0.00|" 'Importe de operaciones exentas
                    vLine += Format(IIf(IsDBNull(dsImpuestos.Tables(0).Rows(0)("im_impuesto")), 0, dsImpuestos.Tables(0).Rows(0)("im_impuesto")), "0.00").ToString.Replace(",", ".") + "|" 'Importe de percepciones o pagos a cuenta de impuestos nacionales
                    vLine += Format(IIf(IsDBNull(dsImpuestosIB.Tables(0).Rows(0)("im_impuesto")), 0, dsImpuestosIB.Tables(0).Rows(0)("im_impuesto")), "0.00").ToString.Replace(",", ".") + "|" 'Importe de percepciones de Ingresos Brutos
                    vLine += "0.00|" 'Importe de percepción por Impuestos Municipales
                    vLine += "0.00|" 'Importe de Impuestos Internos
                    vLine += CDate(_Param.getParametro("FORM_IMP2")).ToString("yyyyMMdd") + "|" 'Fecha de inicio de actividades del Emisor
                    vLine += "01|" 'CE19 Prestador de 01= Productos, 02= Servicios, 03=Ambos
                    vLine += "01|" 'Código de tipo de responsable del Emisor
                    vLine += "IVA responsable Inscripto|" 'Descripción del tipo de responsable del Emisor
                    vLine += _Param.getParametro("FORM_DIR1").Trim() + "|" 'Calle del domicilio del Emisor
                    vLine += "|" 'N° del domicilio del Emisor
                    vLine += "|" 'Piso del domicilio del Emisor
                    vLine += "|" 'Dpto. del domicilio del Emisor
                    vLine += "B1653BPB|" 'Código Postal Argentino del domicilio del Emisor
                    vLine += "|" 'Manzana del domicilio del Emisor
                    vLine += _Param.getParametro("FORM_DIR2").Trim() + "|" 'Localidad del domicilio del Emisor
                    vLine += "|" 'Sector del domicilio del comprador
                    vLine += "01|" 'Provincia del domicilio del Emisor
                    vLine += "|" 'Torre del domicilio del Emisor
                    vLine += "4738-9000|" 'Telefono
                    vLine += "|" 'Observaciones CE33
                    vLine += "|" 'Direccion de Correo Electrónico 1 del Emisor
                    vLine += "|" 'Direccion de Correo Electrónico 2 del Emisor
                    vLine += "|" 'Direccion de Correo Electrónico 3 del Emisor CE36
                    vLine += "|" 'url CE37

                    If _TipoExportacion = "ML" Then 'CE38
                        vLine += "0|" 'Imprime cupon de pago (0 = NO)
                    Else
                        vLine += "|" 'Relleno
                    End If
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    vLine += "|" 'Relleno
                    'vLine += "|" 'Relleno
                    vLine += "|" 'Relleno

                    'Escribe linea
                    Sw1.WriteLine(vLine)
                    '-------------------------------------------------------------------------------
                    'fin "CE"
                    '-------------------------------------------------------------------------------


                    For Each row As DataRow In dsPrefacturas.Tables(0).Rows

                        'Lineas a insertar:

                        'Conseguir datos extra desde la prefactura => vad_clientes, vld_tel_clientes, vld_dom_clientes, wad_provincias
                        'dsCabecera
                        sCampos = "vcli.nu_cuit, vcli.nm_cliente, vtel.nu_telefono, vtel.tp_telefono, vdom.nm_calle, vdom.nu_casa, vdom.nu_piso"
                        sCampos += ", vdom.nu_dpto, vdom.cd_postal, vdom.nm_localidad, prov.nm_provincia, wiva.cd_afip, equi.cd_externo prov_ext"
                        sCampos += ", tcomp.cd_externo tp_comp_ext, pais.cd_afip pais_ext, equi1.cd_externo cuit_ext, vcli.nu_iibb"
                        sCampos += ", vcli.nu_documento, vcli.tp_documento"

                        sOrigen = "((((vad_clientes vcli left join vld_tel_clientes vtel on vcli.cd_cliente = vtel.cd_cliente)"
                        sOrigen += " left join vld_dom_clientes vdom on vcli.cd_cliente = vdom.cd_cliente and vdom.tp_domicilio = 1)"
                        sOrigen += " left join wad_provincias prov on vdom.cd_provincia = prov.cd_provincia)"
                        sOrigen += " left join wad_paises pais on prov.cd_pais = pais.cd_pais "
                        sOrigen += " left join wad_cond_iva wiva on vcli.cd_iva = wiva.cd_iva)"
                        'Uso de tablas de equivalencias
                        sOrigen += " left join wap_io_equivalencias equi on vdom.cd_provincia = equi.cd_interno and equi.nm_tabla = 'wad_provincias' and equi.tp_sistema = 'FE'"
                        sOrigen += " left join wap_io_equivalencias equi1 on prov.cd_pais = equi1.cd_interno and equi1.nm_tabla = 'wad_paises' and equi1.tp_sistema = 'FE'"
                        sOrigen += " left join wap_io_equivalencias tcomp on tcomp.cd_interno = '" + Trim(row("cd_transaccion")).Substring(0, 2) + "' and tcomp.nm_tabla = 'wad_transacciones' and tcomp.tp_sistema = 'FE'"


                        sCondicion = "vcli.cd_cliente = '" + Trim(row("cd_cliente")) + "'"

                        dsCabecera = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)


                        'dsRelacionados
                        sCampos = "max(isnull(cfc.nu_transaccion,'')) as nu_transaccion "

                        sOrigen = " vld_rel_facturas rel INNER JOIN "
                        sOrigen += "vcd_facturas cfc "
                        sOrigen += "ON rel.cd_transaccion_rel = cfc.cd_transaccion AND rel.nu_transaccion_rel = cfc.nu_transaccion "
                        sOrigen += "AND  rel.fe_transaccion_rel = cfc.fe_transaccion RIGHT  JOIN "
                        sOrigen += "vcd_facturas fc "
                        sOrigen += "ON rel.cd_transaccion = fc.cd_transaccion AND rel.nu_transaccion = fc.nu_transaccion "
                        sOrigen += "AND  rel.fe_transaccion = fc.fe_transaccion"

                        sCondicion = "fc.cd_transaccion = '" + Trim(row("cd_transaccion")) + "'"
                        sCondicion += " and fc.nu_transaccion = " + Trim(row("nu_transaccion"))
                        sCondicion += " group by fc.cd_transaccion, fc.nu_transaccion,fc.fe_transaccion"
                        dsRelacionados = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)


                        'dsDetalle
                        sCampos = "vlf.nu_item, vlf.cd_articulo, vlf.nm_articulo, vlf.ca_unidades, vlf.im_unitario, vlf.po_descuento, vlf.im_descuento, "
                        sCampos += " vlf.im_iva, tum.cd_interno cd_unidad_medida, tum.cd_externo cd_afip, umo.cd_afip moneda_ext, vlf.im_total, "
                        sCampos += "art.cd_barras, vlf.st_sin_stock, equi.cd_externo as cd_iva_externo"

                        sOrigen = " (vld_facturas vlf left join "
                        sOrigen += "((SELECT * FROM	wap_io_equivalencias WHERE nm_tabla = 'tad_unidades_medida' and tp_sistema = 'FE')) tum "
                        sOrigen += " on vlf.cd_unidad_medida = tum.cd_interno) "
                        sOrigen += " join tad_articulos art on vlf.cd_articulo = art.cd_articulo "
                        sOrigen += " left join wad_unidades_monetarias umo on umo.cd_unidad_monetaria = '" + Trim(row("cd_unidad_monetaria")) + "'"
                        sOrigen += "left join wap_io_equivalencias equi on equi.nm_tabla = 'tad_impuestos' and equi.tp_sistema = 'FE' and equi.cd_interno = (select rtrim(cd_impuesto_vta) + lTRIM(po_alicuota) as valor from vld_impuestos WHERE cd_impuesto_vta = 'IVAVEN'  AND cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and nu_transaccion = " + Str(row("nu_transaccion")) + ")"
                        'sOrigen += "left join wap_io_equivalencias equi on equi.nm_tabla = 'tad_impuestos' and equi.tp_sistema = 'FE' and equi.cd_interno = (select cd_impuesto_vta from vld_impuestos WHERE cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and nu_transaccion = " + Str(row("nu_transaccion")) + ")"

                        sCondicion = "vlf.cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and vlf.nu_transaccion = " + Str(row("nu_transaccion"))
                        sCondicion += " and vlf.fe_transaccion = " + SystemFunctions.Dates.DateToSql(row("fe_transaccion"))
                        'sOrden = " vlf.cd_articulo"
                        sOrden = " vlf.nu_item"

                        dsDetalle = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion, sOrden)

                        'dsAtribVariables
                        'Dim sComandos, sStoreProcedure As String
                        'Dim xParametros As ArrayList

                        'sCondicion = "cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and nu_transaccion = " + Str(row("nu_transaccion"))
                        'sCondicion += " and fe_transaccion = " + SystemFunctions.Dates.DateToSql(row("fe_transaccion"))

                        'sComandos = "SELECT cd_transaccion,nu_transaccion, fe_transaccion, cd_circuito, tp_factura FROM vlv_atrib_facturas group by cd_transaccion,nu_transaccion, fe_transaccion, cd_circuito, tp_factura having " + sCondicion

                        'sStoreProcedure = "_crosstab"
                        'xParametros = New ArrayList
                        'xParametros.Add(sComandos)
                        'xParametros.Add("max(va_parametro)")
                        'xParametros.Add("cd_parametro")
                        'xParametros.Add("vlv_atrib_facturas")

                        'dsAtribVariables = Sql.ExecSPDS(ConnectionString, sStoreProcedure, xParametros)


                        'dsDatosFormulario (punto  venta)
                        sCampos = "* "
                        sOrigen = "vld_talonarios_pv "
                        sCondicion = "cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and nu_ptovta = " + Str(row("nu_ptovta"))

                        dsDatosFormulario = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                        'Arma algunos datos necesarios luego 
                        Dim cr24 As String
                        If _TipoExportacion = "ML" Then
                            If row("tp_factura") = "A" Then
                                Select Case Trim(Me._Transaccion).Substring(0, 2)
                                    Case "ND"
                                        cr24 = "002"
                                    Case "NC"
                                        cr24 = "003"
                                    Case Else 'asumimos que es una factura
                                        cr24 = "001"
                                End Select
                            Else
                                Select Case Trim(Me._Transaccion).Substring(0, 2)
                                    Case "ND"
                                        cr24 = "007"
                                    Case "NC"
                                        cr24 = "008"
                                    Case Else 'asumimos que es una factura
                                        cr24 = "006"
                                End Select

                            End If
                        Else
                            cr24 = Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("tp_comp_ext")), "", dsCabecera.Tables(0).Rows(0)("tp_comp_ext")))  'CR24 Tipo de Comprobante"
                        End If


                        'Se trae el atributo variable DE_TRANSPORTE para el campo CR41
                        Dim cr41 As String
                        sCondicion = "cd_transaccion = '" + Trim(row("cd_transaccion")) & "'" & _
                                     " AND nu_transaccion=" + Trim(row("nu_transaccion")) & _
                                     " AND fe_transaccion= '" + Trim(row("fe_transaccion")) & "'" & _
                                     " AND cd_parametro = 'DE_TRANSPORTE'"

                        'Traer la variable bEnCajas según el atributo variable 'ST_EN_CAJAS' del pedido
                        Try
                            cr41 = CType(Sql.Search(Common.Env.ConnectionString, "va_parametro", "vld_atrib_facturas", sCondicion), String)

                            'le concatena otro dato
                            sCondicion = "cd_transaccion = '" + Trim(row("cd_transaccion")) & "'" & _
                                     " AND nu_transaccion=" + Trim(row("nu_transaccion")) & _
                                     " AND fe_transaccion= '" + Trim(row("fe_transaccion")) & "'" & _
                                     " AND cd_parametro = 'NM_DESTINO'"

                            cr41 += " - " + CType(Sql.Search(Common.Env.ConnectionString, "va_parametro", "vld_atrib_facturas", sCondicion), String)

                            If cr41 Is Nothing Then
                                cr41 = ""
                            End If
                        Catch ex As Exception
                            cr41 = ""
                        End Try

                        'Se trae el atributo variable DE_TRANSPORTE para el campo CR41
                        Dim pe02 As String
                        sCondicion = "cd_transaccion = '" + Trim(row("cd_transaccion")) & "'" & _
                                     " AND nu_transaccion=" + Trim(row("nu_transaccion")) & _
                                     " AND fe_transaccion= '" + Trim(row("fe_transaccion")) & "'" & _
                                     " AND cd_parametro = 'DE_EMBARQUE_PERMISO'"

                        'Traer la variable bEnCajas según el atributo variable 'ST_EN_CAJAS' del pedido
                        Try
                            pe02 = CType(Sql.Search(Common.Env.ConnectionString, "va_parametro", "vld_atrib_facturas", sCondicion), String)
                            If pe02 Is Nothing Then
                                pe02 = ""
                            End If
                        Catch ex As Exception
                            pe02 = ""
                        End Try


                        'dsPie
                        sCampos = "venc.fe_vencimiento, vcv.nm_cond_vta, umo.cd_afip moneda_ext, rel.nu_pri_comprobante nu_remito, rel.fe_devengamiento fe_remito, vfac.va_obs"

                        sOrigen = "(vcd_facturas vfac left join vld_vencimientos venc on vfac.cd_transaccion = venc.cd_transaccion and vfac.nu_transaccion = venc.nu_transaccion)"
                        sOrigen += " left join wad_unidades_monetarias umo on umo.cd_unidad_monetaria = '" + Trim(row("cd_unidad_monetaria")) + "'"
                        sOrigen += " left join vcd_cond_vta vcv on vfac.cd_cond_vta = vcv.cd_cond_vta"
                        sOrigen += " left join (select distinct rel.cd_transaccion, rel.nu_transaccion, fc.nu_pri_comprobante, fc.fe_devengamiento from vld_rel_facturas rel Join vcd_facturas fc on fc.cd_transaccion = rel.cd_transaccion_rel 	and fc.nu_transaccion = rel.nu_transaccion_rel) rel"
                        sOrigen += "   on vfac.cd_transaccion = rel.cd_transaccion and vfac.nu_transaccion = rel.nu_transaccion "

                        sCondicion = "vfac.cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and vfac.nu_transaccion = " + Str(row("nu_transaccion"))
                        sCondicion += " and vfac.fe_transaccion = " + SystemFunctions.Dates.DateToSql(row("fe_transaccion"))

                        dsPie = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                        'dsImportados

                        sCampos = "cfc.cd_transaccion, cast(cfc.nu_transaccion as varchar) nu_transaccion, cfc.fe_transaccion, "
                        sCampos += " lfc.cd_articulo, lot.nu_despacho, lot.fe_despacho, pais.nm_pais, lot.nm_aduana, "
                        sCampos += " dbo.DateToAnsi(cfc.fe_transaccion) as fe_fecha"

                        sOrigen = "dbo.vcd_facturas cfc INNER JOIN"
                        sOrigen += " dbo.vld_facturas lfc "
                        sOrigen += " ON cfc.cd_transaccion = lfc.cd_transaccion AND cfc.nu_transaccion = lfc.nu_transaccion "
                        sOrigen += " AND  cfc.fe_transaccion = lfc.fe_transaccion INNER JOIN"
                        sOrigen += " dbo.tcp_lotes lot ON lfc.nu_lote = lot.nu_lote INNER JOIN"
                        sOrigen += " dbo.wad_paises pais ON lot.cd_pais = pais.cd_pais"

                        sCondicion = "cfc.cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and"
                        sCondicion += "	cfc.nu_transaccion = " + Str(row("nu_transaccion")) + " and"
                        sCondicion += "	cfc.fe_transaccion = " + SystemFunctions.Dates.DateToSql(row("fe_transaccion")) + " and"
                        sCondicion += "	(lot.tp_lote = 'I')"

                        dsImportados = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                        'dsTributos - excluye el IVA
                        sCampos = "id_impuesto_ext = CASE vad.tp_impuesto_clase"
                        sCampos += "  WHEN 'I' THEN '01'  WHEN 'I' THEN '01' when 'B' then '02' else '99' end,"
                        sCampos += " vad.nm_impuesto, vld.im_imponible, vld.po_alicuota, vld.im_impuesto, vld.po_exencion"

                        sOrigen = " vld_impuestos vld"
                        sOrigen += " join vad_impuestos vad on vld.cd_impuesto_vta = vad.cd_impuesto_vta"

                        sCondicion = "vld.cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and vld.nu_transaccion = " + Str(row("nu_transaccion"))
                        sCondicion += " and vld.fe_transaccion = " + SystemFunctions.Dates.DateToSql(row("fe_transaccion"))
                        sCondicion += " and vad.tp_impuesto <> 'I'"

                        dsTributos = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                        'dsIva
                        sCampos = "iva.cd_externo cd_afip, vld.im_imponible, vld.im_impuesto"

                        sOrigen = " vld_impuestos vld"
                        sOrigen += " join vad_impuestos vad"
                        sOrigen += "  on vld.cd_impuesto_vta = vad.cd_impuesto_vta"
                        sOrigen += " join wad_cond_iva ci"
                        sOrigen += " 	on vad.cd_impuesto_vta = ci.cd_impuesto_vta"
                        sOrigen += " join vcd_facturas fc "
                        sOrigen += " 	on vld.cd_transaccion = fc.cd_transaccion"
                        sOrigen += " 	and vld.nu_transaccion = fc.nu_transaccion"
                        sOrigen += " join vad_clientes cli"
                        sOrigen += " 	on fc.cd_cliente = cli.cd_cliente"
                        sOrigen += " 	and ci.cd_iva = cli.cd_iva"
                        sOrigen += " join (SELECT * FROM	wap_io_equivalencias WHERE nm_tabla = 'tad_impuestos' and tp_sistema = 'FE') iva"
                        sOrigen += " on rtrim(vld.cd_impuesto_vta) + RTRIM(vld.po_alicuota) = iva.cd_interno"


                        sCondicion = "vld.cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and vld.nu_transaccion = " + Str(row("nu_transaccion"))
                        sCondicion += " and vad.tp_impuesto = 'I'"

                        dsIva = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                        'TODO NOW
                        'dsIva2 (para facturas B) es un dato que se genera solo para la exportacion
                        sCampos = "iva.cd_externo cd_afip, fc.im_neto / (1 + cast(po_alicuota as decimal(10,2)) /100) as im_imponible,po_alicuota, fc.im_neto - (fc.im_neto / (1 + cast(po_alicuota as decimal(10,2)) /100))  as im_impuesto "

                        sOrigen = " (select 'IVAVEN' as cd_impuesto_vta, rtrim(cast(va_parametro as decimal(10,2))) AS po_alicuota, "
                        sOrigen += "'" + Trim(row("cd_transaccion")) + "' as cd_transaccion, " + Str(row("nu_transaccion")) + " as nu_transaccion"
                        sOrigen += " from wap_parametros where cd_parametro = 'TASAIVA1') vld "
                        sOrigen += " join vad_impuestos vad "
                        sOrigen += " on vld.cd_impuesto_vta = vad.cd_impuesto_vta"
                        sOrigen += " join wad_cond_iva ci"
                        sOrigen += " on vad.cd_impuesto_vta = ci.cd_impuesto_vta"
                        sOrigen += " join vcd_facturas fc "
                        sOrigen += " on vld.cd_transaccion = fc.cd_transaccion"
                        sOrigen += " and vld.nu_transaccion = fc.nu_transaccion"
                        sOrigen += " join vad_clientes cli"
                        sOrigen += " on fc.cd_cliente = cli.cd_cliente"
                        sOrigen += " and ci.cd_iva = cli.cd_iva"
                        sOrigen += "  join (SELECT * FROM	wap_io_equivalencias WHERE nm_tabla = 'tad_impuestos' and tp_sistema = 'FE') iva"
                        sOrigen += " on 'IVAVEN' + RTRIM(vld.po_alicuota) = iva.cd_interno"

                        sCondicion = "vld.cd_transaccion = '" + Trim(row("cd_transaccion")) + "' and vld.nu_transaccion = " + Str(row("nu_transaccion"))
                        sCondicion += " and vad.tp_impuesto = 'I'"

                        dsIva2 = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)



                        '-------------------------------------------------------------------------------
                        '"CR" CABECERA DE COMPROBANTES
                        '-------------------------------------------------------------------------------
                        'Armado de linea de cabecera

                        vLine = "CR|"
                        'CR02 - CR03
                        Dim vcuit, vtipo_fc As String
                        vtipo_fc = 80
                        vcuit = ""
                        Select Case _TipoExportacion
                            Case "TDF"
                                vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("cuit_ext")), "", dsCabecera.Tables(0).Rows(0)("cuit_ext"))) + "|" 'CUIT pais comprador 
                                vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_cuit")), "", dsCabecera.Tables(0).Rows(0)("nu_cuit"))) + "|" 'vad_cliente.nu_cuit
                            Case "ME"
                                vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("cuit_ext")), "", dsCabecera.Tables(0).Rows(0)("cuit_ext"))) + "|" 'cr02 CUIT pais comprador 
                                'Le pone los guiones para mercado exterior (cr03)
                                vcuit = IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_cuit")), "", dsCabecera.Tables(0).Rows(0)("nu_cuit"))
                                'Tarea FS#837 piden sacar los guiones ... ahora si, ahora no...  ;)
                                'vcuit = vcuit.ToString.Substring(0, 2) + "-" + vcuit.Substring(2, 8) + "-" + vcuit.Substring(10, 1)
                                vLine += vcuit + "|" 'cr03  
                            Case Else
                                'Si tiene nro de Cuit es una FC A
                                If Not IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_cuit")) Then
                                    vcuit = dsCabecera.Tables(0).Rows(0)("nu_cuit")
                                    vtipo_fc = 80
                                Else
                                    If Not IsDBNull(dsCabecera.Tables(0).Rows(0)("tp_documento")) And Not IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_documento")) Then
                                        If dsCabecera.Tables(0).Rows(0)("tp_documento").ToString.ToUpper.Trim = "DNI" Then
                                            vcuit = dsCabecera.Tables(0).Rows(0)("nu_documento").ToString()
                                            vtipo_fc = "96"
                                        End If
                                    End If
                                End If

                                vLine += vtipo_fc + "|" 'CR02 80:CUIT, 96:DNI
                                vLine += vcuit + "|" 'CR03 Puede ser nro de cuit o documento
                        End Select

                        'vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("cuit_ext")), "", dsCabecera.Tables(0).Rows(0)("cuit_ext"))) + "|" 'CUIT pais comprador 

                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nm_cliente")), "", dsCabecera.Tables(0).Rows(0)("nm_cliente"))) + "|" 'vad_cliente.nm_cliente
                        vLine += Trim(IIf(IsDBNull(row("cd_cliente")), "", row("cd_cliente"))) + "|" 'vcd_facturas.cd_cliente
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("cd_afip")), "", dsCabecera.Tables(0).Rows(0)("cd_afip"))) + "|" 'Código de tipo de responsable del comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nm_calle")), "", dsCabecera.Tables(0).Rows(0)("nm_calle"))) + "|" 'Calle del domicilio del comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_casa")), "", dsCabecera.Tables(0).Rows(0)("nu_casa"))) + "|" 'N° del domicilio del Comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_piso")), "", dsCabecera.Tables(0).Rows(0)("nu_piso"))) + "|" 'Piso del domicilio del Comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_dpto")), "", dsCabecera.Tables(0).Rows(0)("nu_dpto"))) + "|" 'Dpto. del domicilio del Comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("cd_postal")), "", dsCabecera.Tables(0).Rows(0)("cd_postal"))) + "|" 'Código Postal Argentino del domicilio del Comprador
                        vLine += "|" 'CR12 Manzana del domicilio del Comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nm_localidad")), "", dsCabecera.Tables(0).Rows(0)("nm_localidad"))) + "|" 'Localidad del domicilio del Comprador
                        Dim codprov As String
                        Try
                            codprov = Format(Int(dsCabecera.Tables(0).Rows(0)("prov_ext")), "00")
                        Catch ex As Exception
                            codprov = ""
                        End Try
                        vLine += codprov + "|" 'CR14 Provincia del domicilio del comprador
                        vLine += "|" 'Torre del domicilio del comprador
                        vLine += "|" 'Sector del domicilio del comprador
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_telefono")), "", dsCabecera.Tables(0).Rows(0)("nu_telefono"))) + "|" 'vld_tel_cliente.nu_telefono
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("tp_telefono")), "", dsCabecera.Tables(0).Rows(0)("tp_telefono"))) + "|" 'Dirección de Correo Electrónico 1 del Receptor
                        vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("tp_telefono")), "", dsCabecera.Tables(0).Rows(0)("tp_telefono"))) + "|" 'Dirección de Correo Electrónico 2 del Receptor
                        vLine += "|" 'Dirección de Correo Electrónico 3 del Receptor
                        vLine += "|" 'Dirección URL sitio Web
                        vLine += "ORIGINAL|" 'Identificador de Original
                        vLine += Trim(IIf(IsDBNull(row("fe_devengamiento")), "", CDate(row("fe_devengamiento")).ToString("yyyyMMdd"))) + "|" 'Fecha del comprobante

                        vLine += Trim(cr24) + "|" 'CR24 Tipo de Comprobante"

                        vLine += Trim(IIf(IsDBNull(row("tp_factura")), "", row("tp_factura"))) + "|" 'Letra del tipo de comprobante
                        vLine += " |" 'cr26 Controlador Fiscal
                        vLine += Trim(IIf(IsDBNull(row("nu_ptovta")), "", Format(row("nu_ptovta"), "0000"))) + "|" 'Punto de venta
                        vLine += Trim(IIf(IsDBNull(row("nu_pri_comprobante")), "", Format(row("nu_pri_comprobante"), "00000000").ToString)) + "|" 'N° de comprobante
                        vLine += Trim(IIf(IsDBNull(row("nu_ult_comprobante")), "", Format(row("nu_ult_comprobante"), "00000000").ToString)) + "|" 'N° de comprobante /hasta
                        vLine += "001|" 'Cantidad de hojas CR30


                        'CR31 al CR41  en ML
                        If _TipoExportacion = "ML" Then

                            Dim cr31 As String
                            cr31 = "Pedido N°:" + IIf(IsDBNull(dsRelacionados.Tables(0).Rows(0)("nu_transaccion")), " ", dsRelacionados.Tables(0).Rows(0)("nu_transaccion").ToString.Trim) + " - " 'Aqui poner el nro de pedido.
                            If Me._Circuito.Trim = "VTA02" Then
                                cr31 += GetEquivalencias("INT", "FE", "CR31_" & _TipoExportacion, True) + " - " 'Leyendas centenas
                            End If
                            cr31 += GetLeyendaImportados(dsImportados) + " - "
                            cr31 += Trim(IIf(IsDBNull(row("va_obs")), "", FormateaCadenas(row("va_obs"))))
                            vLine += cr31 + "|" 'CR31 Observaciones comerciales

                            vLine += "01|" 'CR32 Concepto según tabla 01= Producto, 02= Servicio, 03= Productos y Servicios
                            vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_iibb")), "", dsCabecera.Tables(0).Rows(0)("nu_iibb"))) + "|"  'CR33 IIBB nu_iibb
                            vLine += "S" + Trim(IIf(IsDBNull(row("nu_transaccion")), "", Format(row("nu_transaccion"), "000000").ToString.Substring(row("nu_transaccion").ToString.Length - 6, 6))) + "|" 'CR34 (numero de S)

                            Dim PtoVtaRemito As String = ""
                            'Primero intenta obtener el punto de venta alternativo
                            Try
                                PtoVtaRemito = _Param.getParametro("REMITO_FE" + PuntoVenta.ToString.Trim).Trim()
                            Catch ex As Exception
                            End Try
                            'Si no obtiene nada pone el mismo de la factura
                            If IsDBNull(PtoVtaRemito) Or PtoVtaRemito = "" Then
                                PtoVtaRemito = Format(row("nu_ptovta"), "0000").ToString()
                            End If
                            'si es factura (cr24=001) informa remito
                            If cr24 = "001" And Trim(Str(Common.Env.PuntoVenta)) = "20" Then
                                vLine += PtoVtaRemito + "-" + Format(row("nu_pri_comprobante"), "00000000").ToString + "|" 'CR35 Remito
                                vLine += Trim(IIf(IsDBNull(row("fe_devengamiento")), "", CDate(row("fe_devengamiento")).ToString("dd/MM/yyyy"))) + "|" 'CR36 Fecha del Remito
                            Else
                                vLine += " |"
                                vLine += " |"
                            End If

                            Dim cr37_bj As String()
                            Dim cr37_aux As String = ""
                            cr37_aux = Trim(IIf(IsDBNull(dsDatosFormulario.Tables(0).Rows(0)("cd_id_formulario")), "", dsDatosFormulario.Tables(0).Rows(0)("cd_id_formulario")))
                            cr37_bj = cr37_aux.Trim.Split(",")

                            If cr37_bj(0).Trim = Nothing Then
                                vLine += "|" 'CR37 Bj
                            Else

                                vLine += cr37_bj(0).Trim + "|" 'CR37 Bj
                            End If


                            'La condicion de venta se saca de la diferencia de dias entre fe_devengamiento - fe_vencimiento
                            Dim fe_venc, fe_dev As Date
                            Dim diffechas As Integer
                            Dim condicion_vta As String
                            fe_dev = CDate(row("fe_devengamiento"))

                            'fe_venc = dsPie.Tables(0).Rows(0)("fe_vencimiento")
                            If IsDBNull(dsPie.Tables(0).Rows(0)("fe_vencimiento")) Then
                                fe_venc = fe_dev
                            Else
                                fe_venc = dsPie.Tables(0).Rows(0)("fe_vencimiento")
                            End If

                            diffechas = DateDiff(DateInterval.Day, fe_dev, fe_venc)

                            If diffechas < 1 Then
                                condicion_vta = "Contado"
                            Else
                                condicion_vta = diffechas.ToString.Trim + " días fecha de factura"
                            End If
                            'vLine += Trim(IIf(IsDBNull(dsPie.Tables(0).Rows(0)("nm_cond_vta")), "", dsPie.Tables(0).Rows(0)("nm_cond_vta"))) + "|" ' CR38 Forma de Pago OLD
                            vLine += condicion_vta.ToString.Trim + "|" ' CR38 Forma de Pago

                            vLine += "|" 'Relleno CR39
                            vLine += "|" 'Relleno CR40
                            vLine += "|" 'Relleno CR41

                        Else 'Para el resto

                            vLine += Trim(IIf(IsDBNull(row("va_obs")), "", FormateaCadenas(row("va_obs")))) + "|" 'Observaciones comerciales CR31
                            vLine += "1|" 'Tipo Exportación

                            Dim cr33 As String
                            If IsDBNull(dsCabecera.Tables(0).Rows(0)("tp_comp_ext")) Then
                                cr33 = ""
                            Else
                                cr33 = dsCabecera.Tables(0).Rows(0)("tp_comp_ext").ToString.Trim
                            End If
                            If cr33 = "19" Then
                                If pe02 = "" Or pe02 = "N" Then
                                    vLine += "N|" 'No tiene Permisos Existentes
                                Else
                                    vLine += "S|" 'Tiene Permisos Existentes
                                End If
                            Else
                                vLine += "|" 'Permisos Existentes
                            End If

                            vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("pais_ext")), "", dsCabecera.Tables(0).Rows(0)("pais_ext"))) + "|" 'Pais destino del comprobante
                            vLine += "1|" 'Idioma del comprobante
                            vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("nu_iibb")), "", dsCabecera.Tables(0).Rows(0)("nu_iibb"))) + "|"  'CR36 IIBB nu_iibb
                            If _TipoExportacion = "TDF" Then
                                vLine += "I.V.A. Responsable Inscripto Ley 19640|" 'CR37 (leyenda tdf)
                            Else
                                vLine += "|" 'CR37 (leyenda VACIA PARA ME)
                            End If

                            vLine += "S" + Trim(IIf(IsDBNull(row("nu_transaccion")), "", Format(row("nu_transaccion"), "000000").ToString.Substring(row("nu_transaccion").ToString.Length - 6, 6))) + "|" 'CR38 (numero de S)
                            ' vLine += "S" + Trim(IIf(IsDBNull(row("nu_transaccion")), "", Format(row("nu_transaccion"), "000000").ToString)) + "|" 'CR38 (numero de S)


                            Dim cr39_bj As String()
                            Dim cr39_aux As String = ""
                            cr39_aux = Trim(IIf(IsDBNull(dsDatosFormulario.Tables(0).Rows(0)("cd_id_formulario")), "", dsDatosFormulario.Tables(0).Rows(0)("cd_id_formulario")))
                            cr39_bj = cr39_aux.Trim.Split(",")

                            If cr39_bj(0).Trim = Nothing Then
                                vLine += "|" 'CR39 Bj
                            Else

                                vLine += cr39_bj(0).Trim + "|" 'CR37 Bj
                            End If


                            'vLine += Trim(IIf(IsDBNull(dsDatosFormulario.Tables(0).Rows(0)("cd_id_formulario")), "", dsDatosFormulario.Tables(0).Rows(0)("cd_id_formulario"))) + "|" 'CR39 Bj

                            'CR40 toma distintos valores dependiendo del tipo de exportacion
                            If _TipoExportacion = "ME" Then
                                vLine += Trim(IIf(IsDBNull(row("nu_referencia")), "", row("nu_referencia"))) + "|"  'cr40 Numero de OD (nu_referencia)
                            Else
                                vLine += IIf(IsDBNull(dsRelacionados.Tables(0).Rows(0)("nu_transaccion")), " ", dsRelacionados.Tables(0).Rows(0)("nu_transaccion").ToString.Trim) + "|" 'Aqui poner el nro de pedido.
                            End If

                            vLine += Trim(cr41) + "|" 'CR41 - comentario de transporte.

                        End If
                        vLine += "|" 'Relleno CR42
                        vLine += "|" 'Relleno CR43
                        vLine += "|" 'Relleno CR44
                        vLine += "|" 'Relleno CR45
                        vLine += "|" 'Relleno CR46
                        vLine += "|" 'Relleno CR47
                        vLine += "|" 'Relleno CR48
                        vLine += "|" 'Relleno CR49
                        vLine += "|" 'Relleno  CR50

                        'Escribe linea
                        Sw1.WriteLine(vLine)

                        '-------------------------------------------------------------------------------
                        ' fin "CR"
                        '-------------------------------------------------------------------------------


                        'Permisos de embarque - Agregado 10/8/2011
                        '-------------------------------------------------------------------------------
                        '"PE" PERMISO DE EMBARQUE
                        '-------------------------------------------------------------------------------
                        If Trim(pe02) <> "" And Trim(pe02) <> "N" Then
                            vLine = "PE|"
                            vLine += Trim(pe02) + "|"  'PE02 : codigo permiso
                            'PE03 : codigo pais = CR34

                            vLine += Trim(IIf(IsDBNull(dsCabecera.Tables(0).Rows(0)("pais_ext")), "", dsCabecera.Tables(0).Rows(0)("pais_ext")))  'Pais destino del comprobante

                            'Escribe linea
                            Sw1.WriteLine(vLine)
                        End If
                        '-------------------------------------------------------------------------------
                        ' fin "PE"
                        '-------------------------------------------------------------------------------



                        'CA no se utilizara segun incidente FS#602 del 4/3/2011
                        ''-------------------------------------------------------------------------------
                        ''"CA" COMPROBANTES ASOCIADOS
                        ''-------------------------------------------------------------------------------
                        ''Comprobantes asociados
                        'If _TipoExportacion = "ML" Then

                        '    'En ML cuando es una NC o ND va la FC asociada
                        '    'Armado de linea de cabecera
                        '    vLine = "CA|"
                        '    vLine += "|" 'Relleno
                        '    vLine += "|" 'Relleno
                        '    vLine += "|" 'Relleno
                        '    vLine += "0" 'Relleno
                        '    'Escribe linea
                        '    Sw1.WriteLine(vLine)
                        'End If
                        ''-------------------------------------------------------------------------------
                        '' fin "CA" 
                        ''-------------------------------------------------------------------------------


                        '-------------------------------------------------------------------------------
                        '"TR" DATOS DE TRIBUTOS
                        '-------------------------------------------------------------------------------
                        Dim pi06acum As Decimal = 0
                        If _TipoExportacion = "ML" Then

                            For Each subrow As DataRow In dsTributos.Tables(0).Rows

                                'En ML cuando es una NC o ND va la FC asociada
                                'Armado de linea de cabecera
                                Dim po_alicuota, po_excencion As Decimal
                                po_alicuota = subrow("po_alicuota")
                                po_excencion = subrow("po_exencion")

                                po_alicuota = Math.Round(po_alicuota - (po_alicuota * po_excencion / 100), 3)

                                vLine = "TR|"
                                vLine += Trim(IIf(IsDBNull(subrow("id_impuesto_ext")), "", subrow("id_impuesto_ext"))) + "|" 'TR02 Codigo de trituto
                                vLine += Trim(IIf(IsDBNull(subrow("nm_impuesto")), "", subrow("nm_impuesto"))) + "|" 'TR03 Nombre del impuesto
                                vLine += Format(IIf(IsDBNull(subrow("im_imponible")), 0, subrow("im_imponible")), "0.00").ToString.Replace(",", ".") + "|" 'TR04 Base imponible
                                vLine += Format(po_alicuota, "0.00").ToString.Replace(",", ".") + "|" 'TR05 Alicuota
                                vLine += Format(IIf(IsDBNull(subrow("im_impuesto")), 0, subrow("im_impuesto")), "0.00").ToString.Replace(",", ".") + "" 'TR06 Importe

                                pi06acum += IIf(IsDBNull(subrow("im_impuesto")), 0, subrow("im_impuesto")) 'Acumulador

                                'Escribe linea
                                Sw1.WriteLine(vLine)
                            Next
                        End If
                        '-------------------------------------------------------------------------------
                        ' fin "TR" 
                        '-------------------------------------------------------------------------------

                        '-------------------------------------------------------------------------------
                        '"IV" DATOS DE ALICUOTAS DE IVA
                        '-------------------------------------------------------------------------------
                        Dim pi05acum As Decimal = 0
                        If _TipoExportacion = "ML" Then 'SOLO PARA ML
                            If row("tp_factura") = "B" Then
                                For Each subrow As DataRow In dsIva2.Tables(0).Rows
                                    'im_imponible
                                    vLine = "IV|"
                                    'vLine += Trim(IIf(IsDBNull(subrow("cd_afip")), "", subrow("cd_afip"))) + "|" ''IV2 CODIGO IVA
                                    Dim vCodigoIva As String = "0"
                                    vCodigoIva += IIf(IsDBNull(subrow("cd_afip")), 0, subrow("cd_afip"))

                                    vCodigoIva = vCodigoIva.Substring(vCodigoIva.Length - 2, 2)
                                    vLine += vCodigoIva + "|"  ''IV2 CODIGO IVA
                                    'vLine += Format(IIf(IsDBNull(subrow("cd_afip")), 0, subrow("cd_afip")), "00") + "|"  ''IV2 CODIGO IVA

                                    vLine += Format(IIf(IsDBNull(subrow("im_imponible")), 0, subrow("im_imponible")), "0.00").ToString.Replace(",", ".") + "|"  'IV3 Base imponible
                                    '--vLine += Trim(IIf(IsDBNull(row("im_neto")), "", Format(row("im_neto"), par_redondeoPV).ToString().Replace(",", "."))) + "|" 'IV3 Base imponible FS#704
                                    vLine += Format(IIf(IsDBNull(subrow("im_impuesto")), 0, subrow("im_impuesto")), "0.00").ToString.Replace(",", ".") + "" 'IV4 Importe

                                    pi05acum += IIf(IsDBNull(subrow("im_impuesto")), 0, subrow("im_impuesto")) 'Acumulador
                                    'Escribe linea
                                    Sw1.WriteLine(vLine)
                                Next
                            Else
                                For Each subrow As DataRow In dsIva.Tables(0).Rows
                                    'im_imponible
                                    vLine = "IV|"
                                    'vLine += Trim(IIf(IsDBNull(subrow("cd_afip")), "", subrow("cd_afip"))) + "|" ''IV2 CODIGO IVA
                                    Dim vCodigoIva As String = "0"
                                    vCodigoIva += IIf(IsDBNull(subrow("cd_afip")), 0, subrow("cd_afip"))

                                    vCodigoIva = vCodigoIva.Substring(vCodigoIva.Length - 2, 2)
                                    vLine += vCodigoIva + "|"  ''IV2 CODIGO IVA
                                    'vLine += Format(IIf(IsDBNull(subrow("cd_afip")), 0, subrow("cd_afip")), "00") + "|"  ''IV2 CODIGO IVA

                                    vLine += Format(IIf(IsDBNull(subrow("im_imponible")), 0, subrow("im_imponible")), "0.00").ToString.Replace(",", ".") + "|"  'IV3 Base imponible
                                    vLine += Format(IIf(IsDBNull(subrow("im_impuesto")), 0, subrow("im_impuesto")), "0.00").ToString.Replace(",", ".") + "" 'IV4 Importe

                                    pi05acum += IIf(IsDBNull(subrow("im_impuesto")), 0, subrow("im_impuesto")) 'Acumulador
                                    'Escribe linea
                                    Sw1.WriteLine(vLine)
                                Next
                            End If
                        End If
                        '-------------------------------------------------------------------------------
                        ' fin "IV" 
                        '-------------------------------------------------------------------------------

                        '-------------------------------------------------------------------------------
                        '"OP" DATOS OPCIONALES SIN USO POR AHORA
                        '-------------------------------------------------------------------------------
                        If _TipoExportacion = "ML" Then 'SOLO PARA ML

                            vLine = "OP|"
                            vLine += "|" 'OP2 
                            vLine += "" 'OP3 

                            'Escribe linea
                            Sw1.WriteLine(vLine)
                        End If
                        '-------------------------------------------------------------------------------
                        ' fin "IV" 
                        '-------------------------------------------------------------------------------

                        Dim nNetoAcum As Decimal = 0

                        'Lineas
                        For Each subrow As DataRow In dsDetalle.Tables(0).Rows

                            'Calculos previos.....

                            Dim nIm_descuento, nPo_descuento, nIm_unitario, nIm_unitario_neto, nIm_unitario_neto_total, nCa_unidades As Decimal
                            Dim nMultiplicadorDescuento As Decimal = 0

                            'AF Feb 2011 Se comenta esta seccion
                            '
                            'Si es de tierra del fuego va a tenre que multiplicar *100 para que den los decimales
                            Dim nNu_multiplicador As Integer
                            Select Case _TipoExportacion
                                Case "ME"
                                    If Me._Circuito.Trim = "VTA14" Then
                                        nNu_multiplicador = 1
                                    Else
                                        nNu_multiplicador = 100
                                    End If

                                Case Else
                                    If Me._Circuito.Trim = "VTA02" Then
                                        nNu_multiplicador = 100
                                    Else
                                        nNu_multiplicador = 1
                                    End If

                            End Select

                            'la cantidad se divide por 100 y se redondea a dos decimales
                            'esto se hace porque la afip no recibe mas de dos decimales
                            'el precio unitario luego se multiplica x 100 (neteando la division)
                            nCa_unidades = subrow("ca_unidades")
                            nCa_unidades = Math.Round(nCa_unidades / nNu_multiplicador, 3, MidpointRounding.AwayFromZero)
                            'Multiplicamos entonces el precio y los totales dan bien.
                            nIm_unitario = subrow("im_unitario")
                            nIm_unitario = Math.Round(nIm_unitario * nNu_multiplicador, 2, MidpointRounding.AwayFromZero)


                            'nCa_unidades = subrow("ca_unidades")
                            'nIm_unitario = subrow("im_unitario")

                            nPo_descuento = subrow("po_descuento")
                            nMultiplicadorDescuento = (100 - nPo_descuento) / 100


                            nIm_descuento = nIm_unitario * nPo_descuento / 100
                            'nIm_descuento = Math.Round(nIm_unitario * nPo_descuento / 100, 3, MidpointRounding.AwayFromZero)
                            'nIm_unitario_neto = Math.Round(nIm_unitario - nIm_descuento, _DecCostos, MidpointRounding.AwayFromZero)
                            nIm_unitario_neto = Math.Round(nIm_unitario * (1 - (nPo_descuento / 100)), _DecCostos, MidpointRounding.AwayFromZero)


                            'nIm_unitario_neto_total = nCa_unidades * nIm_unitario_neto
                            nIm_unitario_neto_total = subrow("im_total")

                            'Actualizar: im_total e im_unitario_neto en la factura original para evitar diferencias de impresión luego.
                            'Dim sValores As String
                            'sCampos = "im_unitario_neto, im_total"
                            'sOrigen = "vld_facturas"

                            'sValores = NumberToSql2(nIm_unitario_neto).ToString + " # " + NumberToSql2(nIm_unitario_neto_total).ToString
                            'sCondicion = "cd_transaccion = '" + row("cd_transaccion") + "' and nu_transaccion = " + row("nu_transaccion").ToString
                            'sCondicion += " and nu_item = " + subrow("nu_item").ToString

                            'Sql.Update(ConnectionString, sOrigen, sCampos, sValores, sOrigen, sCondicion)


                            '-------------------------------------------------------------------------------
                            '"DE" DETALLE DE COMPROBANTES
                            '-------------------------------------------------------------------------------
                            vLine = "DE|" 'DE01
                            vLine += Trim(IIf(IsDBNull(subrow("cd_articulo")), "", subrow("cd_articulo"))) + "|" 'DE02 Código de producto/ servicio


                            'Si subrow("st_sin_stock") sele pone 0 (cero) a: 
                            'DE04(-DE05 - DE06 - DE07 - DE08 - DE09 - DE10 - DE12 - DE14)
                            If subrow("st_sin_stock") Then
                                vLine += Trim(IIf(IsDBNull(subrow("nm_articulo")), "", FormateaCadenas(subrow("nm_articulo")))) + " (sin stock)|" 'DE03 Descripción del producto

                                If _TipoExportacion = "ML" Then
                                    vLine += "0.00|" 'DE04
                                Else
                                    vLine += "0.000000|" 'DE04
                                End If

                                vLine += "00|" 'DE05 

                                If _TipoExportacion = "ML" Then
                                    vLine += "0.00|" 'DE06
                                Else
                                    vLine += "0.000000|" 'DE06
                                End If

                                vLine += "0.00|" 'DE07
                                If _TipoExportacion = "ML" Then
                                    vLine += Format(0, par_redondeoPV).ToString().Replace(",", ".") + "|" 'DE08
                                Else
                                    vLine += "0.000000|" 'DE08
                                End If
                                vLine += "0.00|" 'DE09 Importe de ajuste

                                If _TipoExportacion = "ML" Then
                                    vLine += Format(0, par_redondeoPV).ToString().Replace(",", ".") + "|" 'DE10
                                Else
                                    vLine += "0.00|" 'DE10
                                End If

                                vLine += Trim(IIf(IsDBNull(subrow("cd_iva_externo")), "", subrow("cd_iva_externo"))) + "|" 'DE11 Alícuota de IVA aplicable
                                vLine += "0.00|" 'DE12
                            Else
                                vLine += Trim(IIf(IsDBNull(subrow("nm_articulo")), "", FormateaCadenas(subrow("nm_articulo")))) + "|" 'DE03 Descripción del producto
                                '29-nov-11  Si el precio es cero y es de TDF tiene que poner en cero estos campos
                                If _TipoExportacion = "TDF" And nIm_unitario = 0 Then
                                    vLine += "0.000000|"    'DE04 Cantidad
                                    vLine += "00|"      'DE05 Unidad de medida para precio y cantidad cero.
                                Else
                                    If _TipoExportacion = "ML" Then
                                        vLine += Trim(IIf(IsDBNull(nCa_unidades), "", Format(nCa_unidades, "0.00").ToString().Replace(",", "."))) + "|" 'DE04 Cantidad
                                    Else 'para TDF y Expo son 6 decimales
                                        vLine += Trim(IIf(IsDBNull(nCa_unidades), "", Format(nCa_unidades, "0.000000").ToString().Replace(",", "."))) + "|" 'DE04 Cantidad
                                    End If
                                    vLine += Trim(IIf(IsDBNull(subrow("cd_afip")), "", subrow("cd_afip"))) + "|" ' DE05 Unidad de medida
                                End If



                                If _TipoExportacion = "ML" Then 'Si es mercado local redondea en dos decimales y el redondeo real lo hace en el DE15
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario), "", Format(nIm_unitario, "0.00").ToString().Replace(",", "."))) + "|" 'DE06 precio Unitario Neto con dos decimales
                                Else
                                    'AF 4/4/11
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario_neto), "", Format(nIm_unitario_neto, "0.000000").ToString().Replace(",", "."))) + "|" 'DE06 precio Unitario Neto con los decimales que sea
                                End If

                                vLine += Trim(IIf(IsDBNull(subrow("po_descuento")), "", Format(subrow("po_descuento"), "0.00").ToString().Replace(",", "."))) + "|" 'Porcentaje de bonificación

                                If _TipoExportacion = "ML" Then 'DE08: si es expo o TDF 6 decimales
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario), "", Format(nIm_unitario, par_redondeoPV).ToString().Replace(",", "."))) + "|" 'DE08 Precio unitario
                                Else
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario), "", Format(nIm_unitario, "0.000000").ToString().Replace(",", "."))) + "|" 'DE08 Precio unitario
                                End If
                                vLine += Format(0, par_redondeoPV).ToString().Replace(",", ".") + "|" 'DE09 Importe de ajuste

                                'AF -- Modificado 28/2/11
                                'vLine += Trim(IIf(IsDBNull(nIm_unitario), "", Format(nIm_unitario, par_redondeoPV).ToString().Replace(",", "."))) + "|" 'Precio unitario
                                'vLine += Trim(IIf(IsDBNull(subrow("po_descuento")), "", Format(subrow("po_descuento"), "0.00").ToString().Replace(",", "."))) + "|" 'Porcentaje de bonificación
                                'vLine += Trim(IIf(IsDBNull(nIm_unitario_neto), "", Format(nIm_unitario_neto, par_redondeoPV).ToString().Replace(",", "."))) + "|" 'Importe de bonificación  DE08
                                'vLine += "0.00|" 'DE09 Importe de ajuste

                                'DE10 Calcula el Neto total 
                                'vLine += Str(subrow("ca_unidades") * subrow("im_unitario")) + "|" 'Importe total por ítem

                                nNetoAcum += nIm_unitario_neto_total

                                'AF --- Modificado 18/3/11 por pedido de Mara
                                'If _TipoExportacion = "ML" Then
                                '    vLine += Trim(IIf(IsDBNull(nIm_unitario_neto_total), "", Format(nIm_unitario_neto_total, "0.00").ToString().Replace(",", "."))) + "|" 'DE10 Importe total por ítem
                                'Else
                                '    vLine += Trim(IIf(IsDBNull(nIm_unitario_neto_total), "", Format(nIm_unitario_neto_total, par_redondeoPV).ToString().Replace(",", "."))) + "|" 'DE10 Importe total por ítem
                                'End If

                                If _TipoExportacion = "ML" Then 'DE10 en TDF y ME lleva 2 decimales
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario_neto_total), "", Format(nIm_unitario_neto_total, par_redondeoPV).ToString().Replace(",", "."))) + "|" 'DE10 Importe total por ítem
                                Else
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario_neto_total), "", Format(nIm_unitario_neto_total, "0.00").ToString().Replace(",", "."))) + "|" 'DE10 Importe total por ítem
                                End If

                                vLine += Trim(IIf(IsDBNull(subrow("cd_iva_externo")), "", subrow("cd_iva_externo"))) + "|" 'DE11 Alícuota de IVA aplicable
                                vLine += Trim(IIf(IsDBNull(subrow("im_iva")), "", Format(subrow("im_iva"), "0.00").ToString().Replace(",", "."))) + "|" 'DE12 Subtotal por alícuota

                            End If

                            If _TipoExportacion = "ML" Then
                                vLine += "G|" 'DE13 Indicación de exento, gravado y no gravado
                            Else
                                vLine += "|" 'DE13 Indicación de exento, gravado y no gravado
                            End If

                            vLine += Trim(IIf(IsDBNull(subrow("cd_barras")), "", subrow("cd_barras"))) + "|" 'DE14 codigo barras.

                            'Si es mercado local pone el valor con los decimales
                            If _TipoExportacion = "ML" Then
                                If subrow("st_sin_stock") Then
                                    vLine += "0.000|" 'DE15 precio Unitario Neto
                                Else
                                    vLine += Trim(IIf(IsDBNull(nIm_unitario_neto), "", Format(nIm_unitario_neto, "0.000").ToString().Replace(",", "."))) + "|" 'DE15 precio Unitario Neto
                                End If

                                'vLine += "Sin stock|" 'DE15 'Sin stock'
                            Else
                                vLine += "|" 'DE15 
                            End If

                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            vLine += "|" 'Relleno
                            'vLine += "|" 'Relleno
                            vLine += "|" 'Relleno

                            'Escribe linea
                            Sw1.WriteLine(vLine)
                            '-------------------------------------------------------------------------------
                            ' fin "DE" 
                            '-------------------------------------------------------------------------------


                        Next

                        '-------------------------------------------------------------------------------
                        '"PI" PIE DE COMPROBANTE
                        '-------------------------------------------------------------------------------
                        'Pie de comprobante
                        vLine = "PI|"



                        If _TipoExportacion = "ML" Then
                            vLine += Trim(IIf(IsDBNull(row("im_total")), "", Format(row("im_total"), "0.00").ToString().Replace(",", "."))) + "|" 'PI02 Importe total del comprobante
                            vLine += "0.00|" 'PI03 Importe total de conceptos que no integran el precio neto gravado
                            If row("tp_factura") = "B" Then
                                Dim pi04 As Decimal
                                pi04 = CType(row("im_total"), Decimal) - pi05acum
                                vLine += Format(pi04, "0.00").ToString().Replace(",", ".") + "|" ''PI04 
                            Else
                                vLine += Trim(IIf(IsDBNull(row("im_neto")), "", Format(row("im_neto"), "0.00").ToString().Replace(",", "."))) + "|" 'Importe neto gravado
                            End If
                            'vLine += Trim(IIf(IsDBNull(row("im_impuesto")), "", Format(row("im_impuesto"), "0.00").ToString().Replace(",", "."))) + "|" 'PI05 iva, Impuesto liquidado
                            vLine += Format(pi05acum, "0.00").ToString().Replace(",", ".") + "|" ''PI05 iva, Impuesto liquidado
                            vLine += Format(pi06acum, "0.00").ToString().Replace(",", ".") + "|" 'PI06  IMPORTE DE IMPUESTOS SUMA DE TR06
                            vLine += "0.00|" 'Importe de operaciones exentas
                            vLine += "0.00|" 'Importe de percepciones o pagos a cuenta de impuestos nacionales
                            vLine += "0.00|" 'Importe de percepción de Ingresos Brutos
                            vLine += "0.00|" 'Importe de percepción por Impuestos Municipales
                            vLine += "0.00|" 'Importe de Impuestos Internos
                            vLine += "0.00|" 'PI12 Importe total de bonificaciones
                        Else
                            'Cambio FS#1002 
                            'vLine += Trim(IIf(IsDBNull(row("im_total")), "", Format(row("im_total"), par_redondeoPV).ToString().Replace(",", "."))) + "|" 'PI02 Importe total del comprobante
                            vLine += Trim(IIf(IsDBNull(row("im_total")), "", Format(row("im_total"), "0.00").ToString().Replace(",", "."))) + "|" 'PI02 Importe total del comprobante

                            vLine += "0.00|" 'PI03 Importe total de conceptos que no integran el precio neto gravado

                            'Cambio FS#1002 
                            'vLine += Trim(IIf(IsDBNull(row("im_neto")), "", Format(row("im_neto"), par_redondeoPV).ToString().Replace(",", "."))) + "|" 'PI04 Importe neto gravado
                            vLine += Trim(IIf(IsDBNull(row("im_neto")), "", Format(row("im_neto"), "0.00").ToString().Replace(",", "."))) + "|" 'PI04 Importe neto gravado

                            vLine += Trim(IIf(IsDBNull(row("im_impuesto")), "", Format(row("im_impuesto"), "0.00").ToString().Replace(",", "."))) + "|" 'PI05 iva, Impuesto liquidado
                            vLine += "0.00|" 'Impuesto liquidado a RNI o percepción a no categorizados 
                            vLine += "0.00|" 'Importe de operaciones exentas
                            vLine += "0.00|" 'Importe de percepciones o pagos a cuenta de impuestos nacionales
                            vLine += "0.00|" 'Importe de percepción de Ingresos Brutos
                            vLine += "0.00|" 'Importe de percepción por Impuestos Municipales
                            vLine += "0.00|" 'Importe de Impuestos Internos
                            vLine += "0.00|" 'PI12 Importe total de bonificaciones
                        End If
                        If _TipoExportacion = "ML" Then
                            vLine += "06|" ' PI13 Forma de Pago (Credito)
                        Else
                            vLine += Trim(IIf(IsDBNull(dsPie.Tables(0).Rows(0)("nm_cond_vta")), "", dsPie.Tables(0).Rows(0)("nm_cond_vta"))) + "|" ' PI13 Forma de Pago (Credito)
                        End If

                        If IsDBNull(row("fe_entrega")) Then  'Fecha de entrega
                            vLine += "|" 'Fecha de entrega
                        Else
                            vLine += CDate(row("fe_entrega")).ToString("yyyyMMdd") + "|" 'Fecha de entrega
                        End If
                        vLine += "|" 'Fecha Desde del Servicio Facturado
                        vLine += "|" 'Fecha Hasta del Servicio Facturado
                        If IsDBNull(dsPie.Tables(0).Rows(0)("fe_vencimiento")) Then 'Fecha Vencimiento para el Pago
                            vLine += "|"
                        Else
                            vLine += CDate(dsPie.Tables(0).Rows(0)("fe_vencimiento")).ToString("yyyyMMdd") + "|"
                        End If
                        vLine += "0.00|" 'Transporte
                        vLine += Trim(IIf(IsDBNull(dsPie.Tables(0).Rows(0)("moneda_ext")), "", dsPie.Tables(0).Rows(0)("moneda_ext"))) + "|" 'Códigos de moneda
                        vLine += Trim(IIf(IsDBNull(txtCotMonExt.Value), "", Format(txtCotMonExt.Value, "0.000000").ToString().Replace(",", "."))) + "|" 'PL20 Tipo de cambio

                        If _TipoExportacion = "ML" Then
                            vLine += "1|" 'PI21 Cantidad de alícuotas de IVA TODO:
                        Else
                            vLine += "0|" 'PI21 Cantidad de alícuotas de IVA
                        End If

                        vLine += "|" 'PI22 Código de operación
                        vLine += "|" 'PI23 Código de crédito fiscal no computable
                        vLine += "|" 'PI24 Fecha de CAE
                        vLine += "|" 'PI25 CAE
                        vLine += "|" 'PI26 Resultado
                        vLine += "|" 'PI27 Fecha Vto. CAE
                        vLine += "|" 'PI28 Motivo


                        Select Case _TipoExportacion 'INCOTERMS vcd_facturas.cd_cond_precio PI30
                            Case "TDF"
                                vLine += GetEquivalencias("INT", "FE", "PI29_" & _TipoExportacion, True) + "|" 'Observaciones PI29
                                vLine += "CPT|"
                            Case "ME"
                                vLine += GetEquivalencias("INT", "FE", "PI29_" & _TipoExportacion, True) + "|" 'Observaciones PI29
                                vLine += Trim(IIf(IsDBNull(row("cd_cond_precio")), "", row("cd_cond_precio"))) + "|" 'INCOTERMS vcd_facturas.cd_cond_precio PI30
                            Case Else
                                'FS#624 pide cambio en PI29
                                'vLine += GetEquivalencias("INT", "FE", "PI29_" & _TipoExportacion, True) + "|" 'Observaciones PI29
                                vLine += "|" 'PI29 Observaciones fijas.
                                vLine += "|" 'PI30 ML local Relleno
                        End Select


                        If _TipoExportacion = "ML" Then
                            'Cambiado 30/3/11 
                            'vLine += GetLeyendaImportados(dsImportados) + " - " + Trim(IIf(IsDBNull(row("va_obs")), "", row("va_obs"))) + "|" 'PI31
                            vLine += "|" 'PI31
                            vLine += "|" 'PI32
                            vLine += "|" 'PI33
                            vLine += "|" 'PI34
                            vLine += "|" 'PI35
                        Else
                            vLine += "|" 'PI31
                            If _TipoExportacion = "ME" Then
                                'Tarea FS#837 ahora piden que no traiga nada en PI32 y PI33 para Mercado exterior
                                'vLine += Trim(IIf(IsDBNull(dsPie.Tables(0).Rows(0)("nu_remito")), "", dsPie.Tables(0).Rows(0)("nu_remito"))) + "|" 'dsPie.Tables(0).Rows(0)("nu_remito") PI32
                                ''PI33
                                'Dim fe_remito As String
                                'If IsDBNull(dsPie.Tables(0).Rows(0)("fe_remito")) Then
                                '    fe_remito = ""
                                'Else
                                '    fe_remito = CDate(dsPie.Tables(0).Rows(0)("fe_remito")).ToString("dd/MM/yyyy")
                                'End If
                                'vLine += fe_remito + "|" 'PI33
                                vLine += "|" 'PI32
                                vLine += "|" 'PI33

                            Else
                                'si es TDF usa factura y remito simultaneos
                                If Trim(Me._Transaccion).Substring(0, 1) = "F" Then
                                    vLine += Format(row("nu_ptovta"), "0000").ToString() + "-" + Format(row("nu_pri_comprobante"), "00000000").ToString + "|" 'PI32 - CR35 Remito
                                    vLine += Trim(IIf(IsDBNull(row("fe_devengamiento")), "", CDate(row("fe_devengamiento")).ToString("dd/MM/yyyy"))) + "|" 'PI33 - CR36 Fecha del Remito
                                Else
                                    vLine += "|" 'PI32
                                    vLine += "|" 'PI33
                                End If

                            End If

                            'PI34 leyenda 2
                            If Me._Circuito.Trim = "VTA14" Then
                                vLine += "|"
                            Else
                                vLine += GetEquivalencias("INT", "FE", "PI34_" & _TipoExportacion, True) + "|" 'PI34 leyenda 2
                            End If
                            vLine += Trim(IIf(IsDBNull(row("va_obs")), "", FormateaCadenas(row("va_obs")))) + "|" 'PI35 leyenda 3

                        End If

                        Select Case _TipoExportacion 'PI36 - PI37
                            Case "TDF" 'productos importados
                                vLine += GetLeyendaImportados(dsImportados) + "|"
                                vLine += "|" 'Relleno
                            Case "ME"
                                vLine += GetEquivalencias("INT", "FE", "PI36_" & _TipoExportacion, True) + "|" 'PI36 leyenda 4
                                vLine += "|" 'Relleno
                            Case Else
                                vLine += Trim(IIf(IsDBNull(nNetoAcum), "", Format(nNetoAcum, par_redondeoPV).ToString().Replace(",", "."))) + "|" 'PI36 sUBTOTAL SUMATORIA DE DE10 TODO:
                                vLine += Trim(IIf(IsDBNull(row("num2letras")), "", row("num2letras"))) + "|"  'PI37 importe expresado en letras num2letras
                        End Select

                        vLine += "|" 'PI38 Relleno
                        vLine += "|" 'PI39 Relleno
                        vLine += "|" 'PI40 Relleno
                        vLine += "|" 'PI41 Relleno
                        vLine += "|" 'PI42 Relleno
                        vLine += "|" 'PI43 Relleno
                        vLine += "|" 'PI44 Relleno
                        vLine += "|" 'PI45 Relleno
                        vLine += "|" 'PI46 Relleno
                        vLine += "|" 'PI47 Relleno
                        vLine += "|" 'PI48 Relleno
                        vLine += "|" 'PI49 Relleno
                        vLine += "|" 'PI50 Relleno
                        vLine += "|" 'PI51 Relleno
                        vLine += "|" 'PI52 Relleno
                        vLine += "|" 'PI53 Relleno
                        vLine += "" 'PI54 Relleno

                        'Escribe linea
                        Sw1.WriteLine(vLine)
                        '-------------------------------------------------------------------------------
                        ' fin "PI" 
                        '-------------------------------------------------------------------------------


                    Next

                    Sw1.Close()

                    'Aqui actualiza la cotizacion en los comprobantes que procesó:
                    '                    Update(vld_atrib_facturas)
                    '                    va_parametro = 0
                    'from vld_atrib_facturas a  join vcd_facturas b
                    'on a.cd_transaccion = b.cd_transaccion and a.nu_transaccion = b.nu_transaccion
                    'where a.cd_parametro = 'IMP_COTIZ'
                    'and b.cd_estado_trans = 'PREFACTURA'

                    sCampos = "va_parametro"
                    sOrigen = "vld_atrib_facturas"
                    Dim sValores As String
                    sValores = Me.txtCotMonExt.Value.ToString
                    Dim sOrigen2 As String
                    sOrigen2 = "vld_atrib_facturas a  join vcd_facturas b"
                    sOrigen2 += " on a.cd_transaccion = b.cd_transaccion and a.nu_transaccion = b.nu_transaccion"
                    sCondicion = "b.cd_transaccion = '" & Trim(Me._Transaccion) & "' and b.nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))
                    sCondicion += " and b.cd_estado_trans = 'PREFACTURA' and b.cd_circuito = '" & Me._Circuito.Trim & "'"
                    sCondicion += " and a.cd_parametro = 'IMP_COTIZ' "

                    Sql.Update(ConnectionString, sOrigen, sCampos, sValores, sOrigen2, sCondicion)



                    'Fin del proceso
                    StartFrame.US.Display.MsgBox("Exportación completada.", "Exportar", StartFrame.US.Display.MsgBoxTipos.msgInformacion)
                Catch ex As Exception
                    StartFrame.US.Display.MsgBox("Error en la generación del archivo de exportación. " + ex.Message.ToString, "Exportar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                    Try
                        Sw1.Close()
                    Finally
                    End Try

                    Exit Sub
                End Try

            Catch ex As Exception
                StartFrame.US.Display.ShowError(ex, "Se produjeron errores al exportar Factura Electronica.")
            Finally
                'Actualiza el mensaje
                mensaje.Close()
            End Try

        End Sub





#End Region

#Region " Funciones "
        'le quita los enter a las cadenas
        Private Function FormateaCadenas(ByVal entrada As String) As String
            Dim salida As String = entrada

            If IsDBNull(entrada) Then
                salida = ""
            End If

            'Le quita caracteres de enter
            salida = Replace(Replace(salida, vbLf, " "), vbCr, " ")
            salida = Replace(salida, "|", "I")

            FormateaCadenas = salida

        End Function

        Private Function GetLeyendaImportados(ByVal dsImportados As DataSet) As String
            Dim salida As String = ""

            For Each row As DataRow In dsImportados.Tables(0).Rows
                '                "##Merc. Import." + cstr({Table8.cd_articulo}) +
                '", desp." + trim({Table8.nu_despacho}) + ", ing. " + 
                'cstr({@fecha}) + ", desde " + {Table8.nm_pais} + ", aduana " + {Table8.nm_aduana}
                salida += "Merc. Import. "
                salida += row("cd_articulo")
                salida += ", desp." + Trim(row("nu_despacho").ToString)
                salida += ", ing." + Format(row("fe_despacho"), "dd/MM/yy")
                salida += ", desde " + Trim(row("nm_pais").ToString)
                salida += ", aduana " + Trim(row("nm_aduana").ToString)
            Next

            salida = Replace(Replace(salida, vbLf, " "), vbCr, " ")

            GetLeyendaImportados = salida
        End Function
        Private Function GetEquivalencias(ByVal nm_tabla As String, ByVal tp_sistema As String, ByVal cd_interno As String, Optional ByVal devuelve_obs As Boolean = False) As String
            'Esta funcion trae la equivalencia externa de un dato internto
            'Para eso debe tener un valor en la tabla wap_io_equivalencias
            Dim valor As String
            Try
                'Puede devolver tanto un codigo como una observacion
                If devuelve_obs Then
                    valor = CType(Sql.Search(ConnectionString, "va_obs", "wap_io_equivalencias", "nm_tabla = '" & nm_tabla & "' AND tp_sistema = '" & tp_sistema & "' and cd_interno = '" & cd_interno & "'"), String)
                Else
                    valor = CType(Sql.Search(ConnectionString, "cd_externo", "wap_io_equivalencias", "nm_tabla = '" & nm_tabla & "' AND tp_sistema = '" & tp_sistema & "' and cd_interno = '" & cd_interno & "'"), String)

                End If
                'Reemplaza los enter por espacios porque dan error.
                valor = Replace(Replace(valor, vbLf, " "), vbCr, " ")


                Return valor
            Catch ex As Exception
                Throw New Exception("No se pudo encontrar el codigo de equivalencia " & nm_tabla.TrimEnd & " para el codigo " & cd_interno.TrimEnd)
            End Try

        End Function

        ''' Transforma la cadena recibida por parámetro a la sintáxis del motor de base de datos.
        ''' </summary>
        ''' <remarks>Esta función verifica el formato numérico a utilizar reemplazando el separador de decimales por "." y el de miles lo anula, para evitar conflictos con los comandos SPT ejecutados al motor de base de datos.</remarks>
        ''' <param name="valor">Cadena de texto pura sin tener en cuenta la sintáxis del motor de base de datos.</param>
        ''' <returns>STRING convertido al formato SQL.</returns>
        Private Function NumberToSql2(ByVal valor As Object) As String

            Dim sValor As String

            sValor = Strings.IsSqlNull(valor).Trim

            'Verifica el formato numérico a utilizar y lo modifica si no se usa: 1,000.25
            If System.Globalization.NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator <> "." _
                Or System.Globalization.NumberFormatInfo.CurrentInfo.CurrencyGroupSeparator <> "," Then
                sValor = sValor.Replace(",", ";")   'auxiliar de transformación
                sValor = sValor.Replace(".", ",")   'coma como sep. de miles
                sValor = sValor.Replace(";", ".")   'punto para sep. de decimales
            End If
            'anula la "," para que no haya conflictos en comandos SPT
            sValor = sValor.Replace(",", "")   'coma como sep. de miles

            'Verifica que el resultado de la transformación sea numérico
            Dim nValor As Decimal
            Try
                nValor = CType(sValor, Double)
            Catch ex As Exception
                'Si la comprobación falla, retorna 0
                sValor = "0"
            End Try

            Return sValor

        End Function

        Private Function ValidaNumeracion(ByVal dsPrefacturas As DataSet) As Boolean
            'Esta función se dedica a validar la numeración legal de los comprobantes a emitir
            'Recibe el dataset de datos a exportar.
            Dim sCampos, sCondicion, sOrigen, cd_talonario As String
            Dim ultimoGenerado, proximoAGenerar As Integer
            Dim ultimoEmitido, proximoAEmitir As Integer

            'Obtiene el talonario, para obtener TODAS LAS TRANSACCIONES.
            'select * from  vld_talonarios_pv where  nu_ptovta = 19 and cd_transaccion = 'NCEL'
            'select * from  vld_talonarios_pv where  cd_talonario  = 'NCE19'
            sOrigen = "vld_talonarios_pv"
            sCondicion = "cd_transaccion = '" & Trim(Me._Transaccion) & "'"
            sCondicion += " and tp_factura = '" & dsPrefacturas.Tables(0).Rows.Item(0)(5).ToString.Trim & "'"
            sCondicion += " and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))

            cd_talonario = Sql.Search(ConnectionString, "cd_talonario", sOrigen, sCondicion)

            'Obtiene el último comprobante generado
            sOrigen = "vcd_facturas"
            sCampos = "max(nu_pri_comprobante) as ultimoGenerado"
            sCondicion = "cd_transaccion in (select cd_transaccion from  vld_talonarios_pv where  cd_talonario  = '" & cd_talonario & "')"
            sCondicion += "AND tp_factura in (select tp_factura from  vld_talonarios_pv where  cd_talonario  = '" & cd_talonario & "')"
            sCondicion += " and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))
            sCondicion += " and cd_estado_trans in ('EMITIDA','CANCELADA')"
            Try
                ultimoEmitido = Sql.Search(ConnectionString, sCampos, sOrigen, sCondicion)
            Catch ex As Exception
                ultimoEmitido = 0
            End Try

            proximoAEmitir = ultimoEmitido + 1

            sCondicion = "cd_transaccion in (select cd_transaccion from  vld_talonarios_pv where  cd_talonario  = '" & cd_talonario & "')"
            sCondicion += "AND tp_factura in (select tp_factura from  vld_talonarios_pv where  cd_talonario  = '" & cd_talonario & "')"
            sCondicion += " and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))
            Try
                ultimoGenerado = Sql.Search(ConnectionString, sCampos, sOrigen, sCondicion)
            Catch ex As Exception
                ultimoGenerado = 0
            End Try

            proximoAGenerar = ultimoGenerado + 1

            'ultimoGenerado = IIf(IsDBNull(dsUltimoGenerado.Tables(0).Rows(0)(0)), 0, dsUltimoGenerado.Tables(0).Rows(0)(0))



            Try

                For Each row As DataRow In dsPrefacturas.Tables(0).Rows
                    If proximoAEmitir <> row("nu_pri_comprobante") Then
                        'primero si existe un comprobante con ese numero le asigna otro no usado.
                        Dim sValores As String
                        sCampos = "nu_pri_comprobante"
                        sOrigen = "vcd_facturas"
                        sValores = Str(proximoAGenerar)
                        sCondicion = "cd_transaccion = '" + row("cd_transaccion") + "' and nu_pri_comprobante = " + proximoAEmitir.ToString.Trim
                        sCondicion += " and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))
                        Sql.Update(ConnectionString, sOrigen, sCampos, sValores, sOrigen, sCondicion)

                        sCampos = "nu_ult_comprobante"
                        Sql.Update(ConnectionString, sOrigen, sCampos, sValores, sOrigen, sCondicion)


                        'Actualiza campos a exportar
                        row("nu_pri_comprobante") = proximoAEmitir
                        row("nu_ult_comprobante") = proximoAEmitir

                        'Actualiza en base de datos
                        sCampos = "nu_pri_comprobante"
                        sOrigen = "vcd_facturas"
                        sValores = Str(proximoAEmitir)
                        sCondicion = "cd_transaccion = '" + row("cd_transaccion") + "' and nu_transaccion = " + Str(row("nu_transaccion"))
                        sCondicion += " and nu_ptovta = " & Trim(Str(Common.Env.PuntoVenta))
                        Sql.Update(ConnectionString, sOrigen, sCampos, sValores, sOrigen, sCondicion)

                        sCampos = "nu_ult_comprobante"
                        Sql.Update(ConnectionString, sOrigen, sCampos, sValores, sOrigen, sCondicion)

                    Else

                    End If
                    proximoAEmitir = proximoAEmitir + 1
                    proximoAGenerar = proximoAGenerar + 1

                Next
            Catch ex As Exception
                ValidaNumeracion = False
                Exit Function
            End Try
            ValidaNumeracion = True

        End Function

        'Crea el directorio si no existe.
        Private Function CreaDirectorio(ByVal _Path As String) As Boolean
            If Not System.IO.Directory.Exists(_Path) Then
                Try
                    ' Try to create the directory.
                    Dim DI1 As System.IO.DirectoryInfo = System.IO.Directory.CreateDirectory(_Path)
                Catch ex As Exception
                    CreaDirectorio = False
                    Exit Function
                End Try
            End If
            CreaDirectorio = True
        End Function
        Friend WithEvents txtCotMonExt As LnkTextBoxNumerico
        Private components As System.ComponentModel.IContainer


#End Region

        Private Sub lblTitulo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblTitulo.Click

        End Sub
    End Class
End Namespace